#include "Matriz.h"

Matriz::Matriz()
{
    tam = 0;
}

Matriz::Matriz(int n, int m)
{
    m = 2*sqrt(n)+1;
    matrix.resize(n);
    for(int i = 0; i < n; i++)
    {
        (matrix[i]).resize(m);
        for(int j = 0; j < m; j++)
        {
            matrix[i][j] = 0;
        }
    }
    tam=n;
}

void Matriz::Resize(int n, int m)
{
    m = 2*sqrt(n)+1;
    matrix.resize(n);
    for(int i = 0; i < n; i++)
    {
        (matrix[i]).resize(m);
        for(int j = 0; j < m; j++)
        {
            matrix[i][j] = 0;
        }
    }
    tam=n;
}

Matriz::~Matriz()
{}

int Matriz::size()
{
    return tam;
}

void Matriz::set(int i , int j, float x)
{
    if( j < i-sqrt(tam) || j > i+sqrt(tam))
    {
        cout<<"ERROR!!! ESCRIBISTE ABAJO DE LA ULTIMA DIAGONAL!!    "<<i<<"-"<<j<<endl<<endl;
        print(2);
        exit(-1);
    }
    else
    {
        if(i>(sqrt(tam)+1))
        {
            matrix[i-1][j+sqrt(tam)-i] = x;
        }
        else
        {
            matrix[i-1][j-1] = x;
        }
    }
}


float Matriz::get(int i, int j)
{
    if( j < i-sqrt(tam) || j > i+sqrt(tam))
    {
        return 0;
    }
    else
    {
        if(i>(sqrt(tam)+1))
        {
            return matrix[i-1][j+sqrt(tam)-i];
        }
        else
        {
            return matrix[i-1][j-1];
        }
    }
}


void Matriz::print(int x)
{
    ofstream pepe;
    pepe.open("./matriz2.txt",ios::out | ios::app);

    for(int i=1; i<=tam; i++)
    {

        for(int j=1; j<=tam; j++)
        {

//            cout<< setprecision(x)<<setw(x)<<get(i,j)<<" ";
            pepe<< setprecision(x)<<setw(x)<<get(i,j)<<" ";
        }
//        cout<<endl;
        pepe<<endl;
    }
}
void Matriz::agregarColumna(vector<float> b)      // agrega el vector b para gauss
{
    for(int i = 0; i < tam; i++)
    {
        matrix[i].push_back(b[i]);
    }
}
